## Лекция 5. Стандартный веб-сервер

### Шаг 1. Инициализация go mod
```
go mod init github.com/vlasove/go2/5.StandardWebServer
```

### Шаг 2. Где найти стандартные шаблоны?
**Полезная ссылка**: https://github.com/golang-standards/project-layout (здесь можно найти советы по стрктурированию/пакетированию/рефакторингу любого Go-приложения)

### Шаг 3. Создадим входную точку в приложение
Стандартный шаблон входной точки :
```
cmd/<app_name>/main.go
```
Мы создадим :
```
cmd/api/main.go
```

### Шаг 3. Инициализация ядра сервера
Стандартным шаблоном диктуется следующая схема
```
internal/app/<app_name>/<app_name>.go
```
У нас будет ```internal/app/api/api.go```

### Шаг 4. Важный пункт про конфигурацию
**Правило**: в Go принято, что:
* конфигурация всегда хранится в сторонних файлах (.toml, .env) 
* в Go проектах ВСЕГДА присутствуют дефолтные настройки (исключение - бд стараются не дефолтить)

### Шаг 5. Конфигурирование API сервера
Базово, для конфигурация нужен лишь порт.
```
intrenal/app/api/config.go
```

### Шаг 6. Создадим конфиги 
```
configs/<app_name>.toml или configs/.env
```

```
//api.toml
bind_addr = ":8080"
```

### Шаг 7. Как конфиги передавать?
Хочется запускать :
```
api.exe -path configs/api.toml
```

### Шаг 8. Конфигурация http сервера
```
go get -u github.com/gorilla/mux
```

### В дз на потом
Добавить в ```makefile```
* go build -v ./cmd/api/


Хочется, чтобы была возможность запускать наше приложение как с ```.toml``` файлом, так и с ```.env```
Добавить в код необходимые блоки, для того, чтобы можно было запускать приложение следующими командами:
* Должна быть возможность запускать проект с конфигами в ```.toml```
```
api -format .env -path configs/.env
```
* Должна быть возможность запускать проект с конфигами в ```.env```
```
api -format .toml -path configs/api.toml
```
* Должна быть возможность запускать проект с дефолтными параметрами (дефолтным будем считать ```api.toml```, если его нет, то запускаем с значениями из структуры ```Config```)
```
api
```
